// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()
const _ = db.command // 获取数据库查询指令

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const openid = wxContext.OPENID // 获取调用用户的 openid

  // event 对象包含了小程序端调用云函数时传入的参数
  // 假设小程序端调用时传入了 { userInfo: { ... } }
  const userData = event.userInfo

  console.log('接收到的用户信息:', userData)
  console.log('用户 OpenID:', openid)

  if (!openid) {
    return {
      code: 401,
      msg: '无法获取用户 OpenID',
      data: null
    }
  }

  if (!userData) {
    return {
      code: 400,
      msg: '缺少用户信息参数',
      data: null
    }
  }

  try {
    // 假设你的用户集合名为 'users'
    const usersCollection = db.collection('users')

    // 尝试在 'users' 集合中查找该 openid 的记录
    const userRecord = await usersCollection.where({
      _openid: openid // 使用 _openid 进行查询
    }).limit(1).get()

    let result;
    if (userRecord.data.length > 0) {
      // 如果记录已存在，则更新用户信息
      const userId = userRecord.data[0]._id; // 获取记录的 _id
      console.log(`用户 ${openid} 已存在，更新记录: ${userId}`);
      result = await usersCollection.doc(userId).update({
        data: {
          name: userData.name,
          gender: userData.gender,
          age: userData.age,
          height: userData.height,
          weight: userData.weight,
          activityLevelId: userData.activityLevelId,
          dietPreferenceId: userData.dietPreferenceId,
          // 可以添加一个更新时间字段
          updatedAt: db.serverDate()
        }
      })
      console.log('更新结果:', result);
    } else {
      // 如果记录不存在，则添加新记录
      console.log(`用户 ${openid} 不存在，添加新记录`);
      result = await usersCollection.add({
        data: {
          _openid: openid, // 保存用户的 openid
          name: userData.name,
          gender: userData.gender,
          age: userData.age,
          height: userData.height,
          weight: userData.weight,
          activityLevelId: userData.activityLevelId,
          dietPreferenceId: userData.dietPreferenceId,
          // 可以添加一个创建时间字段
          createdAt: db.serverDate(),
          updatedAt: db.serverDate()
        }
      })
      console.log('添加结果:', result);
    }

    // 根据 result 判断操作是否成功
    if ((result.stats && result.stats.updated > 0) || result._id) {
       return {
        code: 200,
        msg: '用户信息保存成功',
        data: result
      }
    } else {
       throw new Error('数据库操作未成功执行');
    }

  } catch (err) {
    console.error('保存用户信息到数据库失败:', err)
    return {
      code: 500,
      msg: '保存用户信息失败，请稍后重试',
      error: err
    }
  }
}